﻿using System.Drawing;

internal class Histogram
{
    public static long[] RBr = new long[256]; // Гистограмма яркости красного
    public static long[] GBr = new long[256]; // Гистограмма яркости зелёного
    public static long[] BBr = new long[256]; // Гистограмма яркости синего
    public static long[] Br = new long[256]; // Гистограмма яркости точки

    public static long RBrMax; // Наиболее часто встречающаяся яркость красного     	
    public static long GBrMax; // Наиболее часто встречающаяся яркость зелёного
    public static long BBrMax; // Наиболее часто встречающаяся яркость синего	
    public static long BrMax; // Наиболее часто встречающаяся яркость точки     
    public static long AvgRBr; // Средняя яркость красного 	
    public static long AvgGBr; // Средняя яркость зелёного 	
    public static long AvgBBr; // Средняя яркость синего 


    // Создание яркостной карты
    public static byte[,] CreateBrightMap(Bitmap img)
    {
        var c = new Color();
        var dest = new byte[img.Height,img.Width];

        int i, j, k = 0;
        for (i = 0; i < img.Height; i++)
        {
            for (j = 0; j < img.Width; j++)
            {
                c = img.GetPixel(j, i);
                dest[i, j] = (byte) (c.B*0.11 + c.G*0.59 + c.R*0.3 + 0.5);
            }
        }
        return dest;
    }


    // Пересчёт яркостных показателей
    public static void ReCalcBright(Bitmap img)
    {
        int i, j;
        long SumRBr = 0, SumGBr = 0, SumBBr = 0, SumBr = 0, PicBufSize;
        var c = new Color();

        // Обнуление гистограмм
        for (i = 0; i < 256; i++)
        {
            RBr[i] = 0;
            GBr[i] = 0;
            BBr[i] = 0;
            Br[i] = 0;
        }

        // Расчёт гистограмм
        for (i = 0; i < img.Height; i++)
        {
            for (j = 0; j < img.Width; j++)
            {
                c = img.GetPixel(j, i);
                BBr[c.B]++;
                GBr[c.G]++;
                RBr[c.R]++;

                var brigh = (byte) (c.B*0.11 + c.G*0.59 + c.R*0.3 + 0.5);

                Br[brigh]++;
            }
            ;
        }
        ;

        BrMax = 0;
        RBrMax = 0;
        GBrMax = 0;
        BBrMax = 0;

        for (i = 0; i < 256; i++)
        {
            // Суммарнае яркости (для расчёта средней)
            SumRBr += i*RBr[i];
            SumGBr += i*GBr[i];
            SumBBr += i*BBr[i];
            SumBr += i*Br[i];
            // Поиск максимсальнойц яркости (для гистограммы)                
            if (RBr[i] > RBrMax) RBrMax = RBr[i];
            if (GBr[i] > GBrMax) GBrMax = GBr[i];
            if (BBr[i] > BBrMax) BBrMax = BBr[i];
            if (Br[i] > BrMax) BrMax = Br[i];
        }
        ;
        // расчёт средних 
        PicBufSize = img.Width*img.Height;
        AvgRBr = (byte) (SumRBr/(float) PicBufSize + 0.5);
        AvgGBr = (byte) (SumGBr/(float) PicBufSize + 0.5);
        AvgBBr = (byte) (SumBBr/(float) PicBufSize + 0.5);
    }
}